调用外部函数
此机制可用于通过 Unix 域套接字调用 IEC 应用程序中的外部函数。这允许您创建自己的功能。同时,实现了流程分离。作为 IEC 的一个接口, EXTAPI.UDSExternalFunction 功能块提供在 ExtensionAPI 库。在 Python 中, ExternalFunctionBase 类用于此目的,在提供的示例中提供。
还使用此示例解释了该机制的使用。该示例包含一个 IEC 项目,其中实现了外部函数的调用。该示例还包含被调用函数的实现 myExternalFunction 在Python中。
这UDSExternalCallExample.project示例包含在内Extension Package Example安装示例包后,您将在目录中找到该项目。C:\Users\<user name>\CODESYS Examples\Extension Package Example\<version>\Files\ExternalCall。
更多信息请参见以下内容:示例:通过 Unix 域套接字调用外部函数。
示例,IEC 应用
在里面 UDSExternalCallExample.project 示例项目,一个新的 myExternalFunction 功能块被创建。这扩展了 EXTAPI.UDSExternalFunction 具有输入和输出类型的 FB DINT.其他数据类型也是可以的。一开始要传入Python中要调用的函数的名字。这个地址必须是唯一的。
以下代码用于添加接口外部函数的输入:
Result := THIS^.AddParameter('parameterIn1', 'DINT', TO_STRING(diIn1));然后使用以下代码调用外部函数:
Result := THIS^.Call();
以下代码用于查询Python实现的函数的返回值:
Result := THIS^.GetParameter('parameterOut', 'DINT', ADR(sValue));参数的类型 string.因此,它必须转换为所需的数据类型。
示例,Python 脚本
重要
为扩展 API 提供的 Python 示例需要 Python 3.0。
包含的 uds_external_function.py 样品提供 ExternalFunctionBase 类,它为此功能提供与运行时系统的 Unix 域套接字通信。
这 myExternalFunction 示例中实现的类扩展了 ExternalFunctionBase 类。 Call() 函数是必需的,从IEC的机制中调用。输入和输出参数以字符串元组的形式传递。
例子: {'parameterIn1': ('DINT', '11'), 'parameterIn2': ('DINT', '22')}
在示例中, Call()函数实现了两个输入参数的简单相加:
def Call(self, dictParams):
in1 = int(dictParams['parameterIn1'][1])
in2 = int(dictParams['parameterIn2'][1])
dictRetParams = {}
dictRetParams['parameterOut'] = 'DINT', in1 + in2
return dictRetParams将脚本
uds_external_function.py(安装 CODESYS Control Extension Package 后位于目录C:\Program Files\CODESYS <version>\CODESYS\CODESYS Control SL Extension Package\<version>\Examples\ExternalCall中)复制到目标设备。运行脚本
uds_external_function.py。然后启动
UDSExternalCallExample.project示例项目位于 CODESYS。可以看到项目调用了
myExternalFunction()添加了Python脚本的函数和两个输入参数。
接口的使用仅作为 Linux 的成员 | 是的 |
流程分离 | 是的 |